import http from '../../utils/request.js';
import qiniuUploader from "./qiniuUploader";

/**
 * 	  在需要上传文件的页面使用
 * 
 * 	  页面刚加载的时候 调用initQiniu()
 * 	  上传文件的时候 调用uploadFile()
 *    或者 
 * 	 上传文件的时候直接 initQiniu() -> uploadFile()
 * 		
 */

function getQNToken() {
	return http.$post('host/getQnToken', {});
}


function initQiniu() {
	return new Promise(function(resolve, reject) {
		getQNToken().then((res) => {
			console.log('上传七牛的token:', res.data.token);
			const options = {
				// bucket所在区域，这里是华北区。ECN, SCN, NCN, NA, ASG，分别对应七牛云的：华东，华南，华北，北美，新加坡 5 个区域
				region: 'ECN',
				uptoken: res.data.token,

				// bucket 外链域名，下载资源时用到。如果设置，会在 success callback 的 res 参数加上可以直接使用的 fileURL 字段。否则需要自己拼接
				domain: 'https://ustatic.hudongmiao.com/',
				// qiniuShouldUseQiniuFileName 如果是 true，则文件的 key 由 qiniu 服务器分配（全局去重）。如果是 false，则文件的 key 使用微信自动生成的 filename。出于初代sdk用户升级后兼容问题的考虑，默认是 false。
				// 微信自动生成的 filename较长，导致fileURL较长。推荐使用{qiniuShouldUseQiniuFileName: true} + "通过fileURL下载文件时，自定义下载名" 的组合方式。
				// 自定义上传key 需要两个条件：1. 此处shouldUseQiniuFileName值为false。 2. 通过修改qiniuUploader.upload方法传入的options参数，可以进行自定义key。（请不要直接在sdk中修改options参数，修改方法请见demo的index.js）
				// 通过fileURL下载文件时，文件自定义下载名，请参考：七牛云“对象存储 > 产品手册 > 下载资源 > 下载设置 > 自定义资源下载名”（https://developer.qiniu.com/kodo/manual/1659/download-setting）。本sdk在README.md的"常见问题"板块中，有"通过fileURL下载文件时，自定义下载名"使用样例。
				shouldUseQiniuFileName: false
			};
			// 将七牛云相关配置初始化进本sdk
			qiniuUploader.init(options);
			resolve(res)
		}).catch((err) => {
			console.log(err);
			reject(err);
		})

	});
}

function uploadSingleFile(filePath) {
	return new Promise(function(resolve, reject) {
		// 向七牛云上传
		qiniuUploader.upload(filePath, (res) => {
				resolve(res)
			}, (error) => {
				console.error('error: ' + JSON.stringify(error));
				reject('err')
			}, {
				key: new Date().getTime() + ""
			},
			(progress) => {
				console.log('上传进度', progress.progress);
				console.log('已经上传的数据长度', progress.totalBytesSent);
				console.log('预期需要上传的数据总长度', progress.totalBytesExpectedToSend);
			}, cancelTask => {

			}
		);
	})
}

// 返回结果
// [{fileURL,hash,imageURL,key},...]
function uploadFile(fileArr) {
	return new Promise(function(resolve, reject) {
		const asyncTask = [];

		fileArr.forEach((item) => {
			asyncTask.push(uploadSingleFile(item));
		})

		wx.showLoading({
			mask: true,
			title: '上传中，请稍等~'
		})
		Promise.all(asyncTask).then((res) => {
			console.log('上传七牛后的图片地址:', res)
			wx.hideLoading();
			resolve(res);
		}).catch((err) => {
			wx.hideLoading();
			console.log(err);
			reject(err);
		})
	})
}

export {
	initQiniu,
	uploadFile
}
